package com.thread.test20180827.dieLock;

/**
 * @Description: MainDieLockTest
 * 线程1已经持有了A锁并想要获得B锁的同时，线程2持有B锁并尝试获取A锁，那么这两个线程将永远地等待下去,这个是产生死锁的最根本原因
 * 另一个原因是默认的锁申请操作是阻塞的。
 * 实际环境中的死锁往往比这个复杂的多。可能会有多个线程形成了一个死锁的环路，
 * @author: conceit
 * @Date: 2018/8/27 23:08
 */
public class MainDieLockTest {
    //创建两把锁对象
    static InnerMainDieLock innerMainDieLock1=new MainDieLockTest().new InnerMainDieLock();
    static InnerMainDieLock innerMainDieLock2=new MainDieLockTest().new InnerMainDieLock();

    public static void main(String[] args) {

        //两个对象互相持有
        DieLockTest dieLockTest1=new DieLockTest(false);
        DieLockTest dieLockTest2=new DieLockTest(true);

        Thread thread1=new Thread(dieLockTest1,"线程1");
        Thread thread2=new Thread(dieLockTest2,"线程2");

        thread1.start();
        //只要注释掉一个线程，就不会发生死锁现象
       // thread2.start();
    }


    /**
     * @Description: 内部死锁对象
     * @author: conceit
     * @Date: 2018/8/27 23:23
     */
    public class InnerMainDieLock{

    }


}
